A client and a web server can communicate over stateless protocols such as HTTP. Client-server interactions can be carried out over a series of related client requests and server responses. A web application can create a session for a client to maintain session state between requests. A session can start with the first request that the client makes to the server and can end when the client disconnects or the session times out. To track the state of the client-server interactions, a client can be assigned a session identifier and a session state associated with the session identifier can be maintained on the server. Session state can be application specific and include information relating to components, contexts, user interface elements, data and parameters related to a current state of a client-server interaction. The session state may also be saved to a database to enable, e.g., recovery upon server interruption.